{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%run main.py\n",
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "\n",
    "s3 = S3()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "if not exists(BERT_VOCAB):\n",
    "    s3.download(S3_BERT_VOCAB, BERT_VOCAB)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "torch.set_grad_enabled(False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "words_vocab = BERTVocab.load(BERT_VOCAB)\n",
    "tags_vocab = BIOTagsVocab(TAGS)\n",
    "\n",
    "config = RuBERTConfig()\n",
    "emb = BERTEmbedding.from_config(config)\n",
    "encoder = BERTEncoder.from_config(config)\n",
    "ner = BERTNERHead(config.emb_dim, len(tags_vocab))\n",
    "model = BERTNER(emb, encoder, ner)\n",
    "model.eval()\n",
    "\n",
    "model.emb.load(BERT_EMB) # default downloaded embeddings\n",
    "model.encoder.load(MODEL_ENCODER) # custom pretrained model encoder\n",
    "model.head.load(MODEL_NER) # custom pretrained model head\n",
    "model = model.to(DEVICE)\n",
    "\n",
    "encoder = BERTInferEncoder(\n",
    "    words_vocab,\n",
    "    seq_len=SEQ_LEN, batch_size=BATCH_SIZE\n",
    ")\n",
    "\n",
    "decoder = BERTTagDecoder(tags_vocab)\n",
    "infer = BERTNERInfer(model, encoder, decoder)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# inference\n",
    "\n",
    "default = ['Европейский союз добавил в санкционный список девять политических деятелей из самопровозглашенных республик Донбасса — Донецкой народной республики (ДНР) и Луганской народной республики (ЛНР) — в связи с прошедшими там выборами. Об этом говорится в документе, опубликованном в официальном журнале Евросоюза. В новом списке фигурирует Леонид Пасечник, который по итогам выборов стал главой ЛНР. Помимо него там присутствуют Владимир Бидевка и Денис Мирошниченко, председатели законодательных органов ДНР и ЛНР, а также Ольга Позднякова и Елена Кравченко, председатели ЦИК обеих республик. Выборы прошли в непризнанных республиках Донбасса 11 ноября. На них удержали лидерство действующие руководители и партии — Денис Пушилин и «Донецкая республика» в ДНР и Леонид Пасечник с движением «Мир Луганщине» в ЛНР. Президент Франции Эмманюэль Макрон и канцлер ФРГ Ангела Меркель после встречи с украинским лидером Петром Порошенко осудили проведение выборов, заявив, что они нелегитимны и «подрывают территориальную целостность и суверенитет Украины». Позже к осуждению присоединились США с обещаниями новых санкций для России.',]\n",
    "custom = ['Ваш произвольный текст']\n",
    "\n",
    "chunk = custom if CUSTOM_TUNING else default\n",
    "\n",
    "markups = list(infer(chunk)) # chunk is about 1000 chars? - https://github.com/natasha/naeval/blob/52c4a508bf212b95d4e610cfe1b5e23b8ca94d2f/naeval/ner/models/slovnet.py#L16\n",
    "\n",
    "spans = sum(len(_.spans) for _ in markups)\n",
    "\n",
    "data = [_.as_json for _ in markups]\n",
    "\n",
    "print(markups)\n",
    "\n",
    "from ipymarkup import show_span_ascii_markup as show_markup\n",
    "show_markup(markups[0].text, markups[0].spans)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "env",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0]"
  },
  "vscode": {
   "interpreter": {
    "hash": "fbd3b3cf5ce5dbcb71d33f7b8a90c542bb07cc48175c202e830100849640f809"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
